查看原文
其他

开源特训营 - Lesson 5 - 社区如何评审代码

苏斌 开源社 2021-04-22

编辑:李明康

责编:袁睿斌


作者:课程助教 - 苏斌

主讲教师:张齐勋(北京大学)、赵生宇(同济大学)


本次课程的主题为《社区如何评审代码》,主讲者为来自北京大学的张齐勋老师和来自同济大学的博士研究生赵生宇同学。



实操基础:如何提交与Review PR



PR 的英文全称为"Pull Request",意思是将开发者的仓库与维护者的仓库内容进行合并。PR协作的基本流程包括:

  1. 开发者在本地仓库开发;

  2. 本地仓库提交到GitHub个人仓库;

  3. 从个人仓库向上游仓库发起PR;

  4. 维护者Review PR;

  5. 开发者与维护者讨论细节;

  6. 开发者根据要求修改代码并进行新的提交;

  7. 最终维护者合入PR。




对于开发者而言,提交PR时除了提交文件Commit之外,还要给出PR的标题和内容;对于维护者而言,通过PR的标题与内容了解PR的大概内容,并确定PR中的文件修改是否正确1合理,若有不合理之处要与开发者进行讨论,最终将PR合入。




理论基础:到底什么是PR



开源是一种大规模分布式异步协作生产软件的生产方式,是一种方法论。

PR是开源中由GitHub创造,运行在Git协作流程之上的Web协作模式,用于替代Linux开发中使用邮件进行Patch交付的流程。


1.开源为什么目前只用于软件生产,可以协作生产代码?可以生产其他内容吗?

文本化为大规模的协作和频繁修改迭代带来了可能,而代码是软件的文本化表现形式。文本的修改结果是一目了然的,增减一个字符都可以看得清清楚楚,但是对于二进制的文件来说,对其修改无法通过文本方式查看其修改内容。


2.为什么PR流程是有效的,从SVN到Git到PR,到底是什么决定了一个流程的有效性?

关于Git的起源,老师推荐了一个视频讲座 

(Linus 在 2007 年 Google Talk 上介绍 Git)

其中PR是更简单的可视化协作流程,协作规模越大则协作成本越高,需要有流程机制的设计来控制成本。

 

3.基于第2个问题,可否解决问题1?

我们需要考虑控制的成本因素,包括代码生产的成本和Review的成本,如果可以大幅降低上述成本,则可以支持其他类型内容生产的协作。




实操进阶:玩点新花样     


        

CODE_STYLE明确表明了项目的代码规范,减少沟通成本;使用init类工具,将代码规范检查自动化,减少确认正确性的成本。

PULL_REQUEST_TEMPLATE明确了提交PR时应该提供的信息,以减少沟通成本。通过TEMPLATE可以对PR进行分类,减少指派到正确维护者的成本。

总结:代码要规范,文档要规范

另外,是否我们只能做到文档和代码协作呢?为什么文档和代码可以协作而其他形式的文件很难协作呢?事实上这里就牵涉到了 PR 最核心的内容,即如果检验产出物的正确性。而在不经意之间,GitHub 对 Markdown 的渲染本身也是 CI 的一种。那是否还有其他形式可以来进行 CI 呢?

 

       

老师也提到,理论上所有的数字产品都可以协作,但需要满足两点:


1、文本化,文本化是降低协作生产成本最重要的手段。

2、自动化检验,自动化检验是协作检验最重要的手段。而代码和文本只是有了很成熟的方案而已。

 

那对于 UML、SVG 等图片格式,事实上解决了上面两点,也是完全可以协作的





理论进阶:社会科学视角下的PR协作



在历史文明进程中,推动人类发展的动力包括理性、制度、协作和分工

              

最后老师布置了本周的作业:

  1. 对自己创建的项目编写合适的CODE_STYLE和PULL_REQUEST_TEMPLATE;

  2. 如果可以添加相应的自动化init则更佳,即使添加init,也需要提供文本描述文件;

  3. 参与已有项目,检查是否包含了相关文档,如果不包含,请提PR添加。



活动回顾视频


点击小程序观看第五期活动视频哦~


✨下节课程内容预告:

《如何提交一个合格的PR》主讲者:张齐勋 & 赵生宇





开源社简介


开源社是由国内外支持开源的企业,社区及个人,依“贡献,共识,共治”原则,所组织的厂商中立、纯志愿者、非营利的开源联盟,旨在共创健康可持续发展的开源生态体系,并推动中国开源社区成为全球开源软件的积极参与及贡献者。我们专注于开源治理、国际接轨、社区发展和开源项目。





相关阅读 | Related Reading


开源特训营 - Lesson 1 - 开源基础


开源特训营 - Lesson 2 - 项目启动


开源特训营 - Lesson 3 - GITHUB仓库管理 


开源特训营 - Lesson 4 - 如何运营社区


开源特训营



喜欢本篇内容请给我们点个在看


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存